package com.nt.thah.configuration;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

/**
 * @Description: 日志切面
 * @author: ls
 * @Date: 2020/6/10 10:03
 */
@Aspect
@Component
@Slf4j
public class LogAspect {

    /**
     * 定义一个切入点. 解释下： ~ 第一个 * 代表任意修饰符及任意返回值. ~ 第二个 * 任意包名 ~ 第三个 * 代表任意方法. ~ 第四个 *
     * 定义在web包或者子包 ~ 第五个 * 任意方法 ~ .. 匹配任意数量的参数.
     */
    @Pointcut("execution(public * com.nt.thah.controller..*.*(..)) ")
    public void webLog() {
    }

    /**
     * @Description: 方法执行前打印参数信息
     * @author: ls
     * @Date: 2020/7/13 20:17
     */
    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        log.info("请求URL : " + request.getRequestURL().toString());
        log.info("请求Parameter : " + Arrays.toString(joinPoint.getArgs()));
    }
}
